export const DEFAULT_BODY: { version: string; product: string; platform: 'ios' | 'android', originCountry: string, originIp: string } = {
	version: "10830001",
	product: "words_winner",
	platform: "ios",
	originCountry: '',
	originIp: '',
}

export enum HSAPIURI {
	UserInit = "words_win/user/init",
	UserInfo = "words_win/user/info",
	ConfCountry = "words_win/config/country",
	ConfCommon = "words_win/config/common",
	WithdrawConfig = "words_win/config/withdrawConfig",
	GetNewComerReward = "words_win/reward/getNewCommerReward",
	LotteryConfig = "words_win/reward/lotteryConfig",
	PassLevelConfig = "words_win/reward/passLevelConfig",
	PassLevelReport = "words_win/reward/passLevelReport",
	EliminateReport = "words_win/user/eliminateReport",
}

export interface HSAPIStructMap {
	[HSAPIURI.UserInit]: api_structure_template<{
		/** 初始化用户的设备ID */
		deviceId: string;
		/**
		 * 国家代码
		 * {@link https://q178jmgy9tl.feishu.cn/sheets/MaWdsru9ihFVVZtb7LCcGjy6nef}
		 */
		country: string;
	}, {
		/** 用户ID */
		userId: number;
		/** 用户的国家配置 */
		country: string;
		/** 用户的语言配置 */
		language: string;
	}>,
	[HSAPIURI.UserInfo]: api_structure_template<{
		/** 初始化用户的设备ID */
		userId: number;
	}, {
		/** 用户国家信息 */
		country: string;
		/** 用户语言信息 */
		language: string;
		/** 账户现金总金额 */
		cashTotal: number;
		/** 红包数 */
		redPacket: number;
	}>,
	[HSAPIURI.ConfCountry]: api_structure_template<{
		/** 国家代码 */
		country: string;
	}, {
		/**
		 * 国家代码
		 * {@link https://q178jmgy9tl.feishu.cn/sheets/MaWdsru9ihFVVZtb7LCcGjy6nef}
		 */
		country: string;
		/** 语言代码 */
		language: string;
		/** 货币符号 */
		symbol: string;
		/**
		 * 货币格式是否需要去整
		 * [1]: 需要;
		 * [0]: 不需要;
		 */
		round: 1 | 0;
		/**
		 * 货币格式符号前置
		 * [1]: 前置;
		 * [0]: 后置;
		 */
		front: 1 | 0;
		/**
		 * 千位符
		 * [1]: ".";
		 * [2]: ",";
		 * [3]: " ";
		 */
		thousand: 1 | 2 | 3;
		/**
		 * 基数点
		 * [1]: ".";
		 * [2]: ",";
		 * [3]: " ";
		 */
		point: 1 | 2 | 3;
		/** 常用支付渠道 */
		channel: string[];
	}>,
	[HSAPIURI.ConfCommon]: api_structure_template<{
		/** 用户ID */
		userId: number;
	}, {
		/** 累计消除总数 */
		eliminateTotal: number;
		/** 累计抽奖次数 */
		drawTotal: number;
		/** 强弹配置 */
		forceConfig: Array<{
			/** 红包下限 */
			redStartCount: number;
			/** 红包上限 */
			redEndCount: number;
			/** ：是否达成任务条件 */
			forcePopIntervalList: Array<number>;
		}>;
		/** 抽奖进度配置 */
		drawProcessConfig: Array<{
			/** 次数下限 */
			startCount: number;
			/** 次数上限 */
			endCount: number;
			/** 需要通关数 */
			skipCount: number;
		}>;
	}>,
	[HSAPIURI.WithdrawConfig]: api_structure_template<{
		/** 用户ID */
		userId: number;
	}, {
		/** 账户现金总金额 */
		cashTotal: number;
		/** 累计登录天数 */
		loginDays: number;
		/** 用户等级 */
		level: number;
		levelWithdrawConfig: {
			/** 提现金额 */
			cashAmount: number;
			/** 目标关卡 */
			tarLevel: number;
			/** 目标用户等级 */
			tarUserLevel: number
		};
		/** 现金提款档位配置 */
		cashWithdrawConfig: Array<{
			/** 提现金额 */
			cashAmount: number;
			/** 目标活跃天数 */
			tarActiveDays: number;
			/** 目标用户等级 */
			tarUserLevel: number;
			/** 提现进度 小数 */
			wdProgress: number;
			/** 提现档位 */
			withdrawLevel: number;
		}>;
	}>,
	[HSAPIURI.GetNewComerReward]: api_structure_template<{
		/** 用户ID */
		userId: number;
	}, {
		/** 奖励的现金金额 */
		cashAmount: number;
		/** 现金总额 */
		cashTotal: number;
	}>,
	[HSAPIURI.LotteryConfig]: api_structure_template<{
		/** 用户ID */
		userId: number;
	}, {
		/** 中奖结果 */
		lotteryResults: {
			/** 中奖类型-序号 1 少张钞票 2 大张钞票 3 提示道具 4 PayPal提款 5 PayPal提款 */
			awardType: number;
			/** 奖励数量-道具 */
			awardNum: number;
			/** 奖励数量-现金 */
			awardAmount: number;
		};
		/** 现金总数 */
		cashTotal: number
	}>,
	[HSAPIURI.PassLevelConfig]: api_structure_template<{
		/** 用户ID */
		userId: number;
	}, {
		/** 过关奖励金额 */
		cashAmount: number;
	}>,
	[HSAPIURI.PassLevelReport]: api_structure_template<{
		/** 用户ID */
		userId: number;
		/** 获得现金额度*/
		cashAmount: number;
		/** 领取方式 ：1 普通领取 2 视频双倍领取 */
		getType: number;
	}, {
		/** 更新后的现金总额 */
		cashTotal: number;
	}>,
	[HSAPIURI.EliminateReport]: api_structure_template<{
		/** 用户ID */
		userId: number;
	}, {
		/** 红包数 */
		packageCount: number;
		/** 小额现金额度 */
		cashAmount: number;
		/** 现金总额 */
		cashTotal: number;
	}>
}

export type HSReq<A extends HSAPIURI> = HSAPIStructMap[A]['request'];
export type HSRes<A extends HSAPIURI> = HSAPIStructMap[A]['response'];
export type HSBody<A extends HSAPIURI> = HSReq<A>['data'];
export type HSResult<A extends HSAPIURI> = Awaited<HSRes<A>>['result'];

type request_template<body> = {
	/** cocos 请求唯一标识 */
	ccToken: string;
	/** app版本号 */
	version: string;
	/** 产品名称 */
	product: string;
	/** 平台 ios android */
	platform: string;
	/** 客户端原始国家 */
	originCountry: string;
	/** 客户端原始ip */
	originIp: string;
	/** 接口请求参数 */
	data: body;
}

type response_template<result> = {
	/** cocos 请求唯一标识 */
	ccToken: string;
	/** 响应是否成功 */
	success: boolean;
	/** 响应信息 */
	message: string;
	/** 响应码 */
	code: string;
	/** 响应数据 */
	result: result;
}

/** API结构体 */
type api_structure_template<body, result> = {
	/** 接口标识符 */
	api: HSAPIURI;
	/** 请求数据 */
	request: request_template<body>;
	/** 响应数据 */
	response: Promise<response_template<result>>
}
